package adapterDemo;

/*************************************************************
 *
 * 测试适配器
 *
 * 适配器模式解析：
 * 1.客户通过目标接口调用适配器的方法对适配器发出请求
 * 2.适配器使用被适配者接口把请求转换成被适配这的一个或多个调用接口
 * 3.客户接收到调用的结果，但并未察觉这一切是适配器在起转换作用
 *
 ****************************************************************/
public class DuckTestDriver {
    public static void main(String[] args) {
        MallarDuck duck = new MallarDuck();


        Turkey turkey = new WildTurkey();
        TurkeyAdapter turkeyAdapter = new TurkeyAdapter(turkey);
        System.out.println("The turkey says ....");
        turkey.gobble();
        turkey.fly();
        System.out.println("\nThe Duck says ....");
        testDuck(duck);
        System.out.println("\nThe TurkeyAdapter says ...");
        testDuck(turkeyAdapter);

    }

    static void testDuck(Duck duck){
        duck.quack();
        duck.fly();
    }
}
/********************************************************
 *
 * 适配器模式定义：
 *将一个类的接口，转换成客户期望的另一个接口，适配器让原本接口不兼容
 * 的类可以合作无间
 *
 * 适配器模式充满着良好的OO设计原则：使用对象组合，以修改的接口包装
 * 被适配者，这种做法还有额外的优点，那就是，被适配者的任何子类，都
 * 可以搭配着适配器使用
 *
 * 也请留意，这个模式是如何把客户和接口绑定起来，而不是和实现绑起来
 *
 ********************************************************/
